package core

import (
	"encoding/hex"
	"io"
	"log"
	"os"
)

var videoFileStreamHex []string

func ReadVideoFile(filePath string) {
	file, err := os.Open(filePath)
	if err != nil {
		log.Fatalf("无法打开文件: %v", err)
		return
	}
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			log.Fatalf("无法关闭文件: %v", err)
			return
		}
	}(file)

	// 读取文件内容
	content, err := io.ReadAll(file)
	if err != nil {
		log.Fatalf("无法读取文件内容: %v", err)
		return
	}
	var tmpVideoFileStreamHex []string
	for i := 0; i < len(content); i += 16 {
		tmpVideoFileStreamHex = append(tmpVideoFileStreamHex, hex.EncodeToString(content[i:i+16]))
	}

	videoFileStreamHex = tmpVideoFileStreamHex
	FileInfo.ProcessFileStream()
}

var FileInfo VideoFileStreamInfo

type VideoFileStreamInfo struct {
	// fytp
	// File Type Box，一般在文件的开始位置，描述的文件的版本、兼容协议等。
	FileVersion  string
	FileProtocol string

	// moov
	// Movie Box，包含本文件中所有媒体数据的宏观描述信息以及每路媒体轨道的具体信息。
	// 一般位于 ftyp 之后，也有的视频放在文件末尾。注意，当改变 moov 位置时，内部一些值需要重新计算。
}

func (s *VideoFileStreamInfo) ProcessFileStream() {
	s.FileVersion = videoFileStreamHex[0]
	s.FileProtocol = videoFileStreamHex[1]
}
